/**
 * 通用工具类
 */
export default class tools {
  /**
   * 不为空
   * @param val
   * @returns {boolean}
   */
  static notEmpty(val) {
    return !this.isEmpty(val);
  }

  /**
   * 是否为定义
   * @param val
   * @returns {boolean}
   */
  static isUndefined(val) {
    return val === null || typeof val === "undefined";
  }

  /**
   * 为空
   * @param val
   * @returns {boolean}
   */
  static isEmpty(val) {
    if (
      val === null ||
      typeof val === "undefined" ||
      (typeof val === "string" && val === "" && val !== "undefined")
    ) {
      return true;
    }
    return false;
  }

  /**
   * 强转int型
   * @param val
   * @param defaultValue
   * @returns {number}
   */
  static toInt(val, defaultValue) {
    if (this.isEmpty(val)) {
      return defaultValue === undefined ? -1 : defaultValue;
    }
    const num = parseInt(val, 0);
    let returnData;
    if (Number.isNaN(num)) {
      if (defaultValue === undefined) {
        returnData = -1;
      } else {
        returnData = defaultValue;
      }
    } else {
      returnData = num;
    }
    return returnData;
  }

  /**
   * Json强转为Form类型
   * @param obj
   * @returns {FormData}
   */
  static toFormData(obj) {
    const data = new FormData();
    Object.keys(obj).forEach(key => {
      data.append(key, Array.isArray(obj[key]) ? obj[key].join(",") : obj[key]);
    });
    return data;
  }

  /**
   * date类转为字符串格式
   * @param date
   * @param format
   * @returns {null}
   */
  static format(date, format = "YYYY-MM-DD HH:mm:ss") {
    return date ? date.format(format) : null;
  }

  /**
   * 根据逗号联合
   * @param arr
   * @returns {string}
   */
  static join(arr) {
    return arr ? arr.join(",") : "";
  }

  /**
   * 根据逗号分隔
   * @param str
   * @returns {string}
   */
  static split(str) {
    return str ? String(str).split(",") : "";
  }

  /**
   * 脱敏处理
   * @param str
   * @param front 前置保留长度
   * @param end 后置保留长度
   * @returns {string}
   */
  static efs(str, front, end) {
    let frontLen = front ? front : 1;
    let endLen = end ? end : 1;
    var len = str.length - frontLen - endLen;
    var star = "";
    for (var i = 0; i < len; i++) {
      star += "*";
    }
    let res =
      str.substring(0, frontLen) +
      star +
      (star ? str.substring(str.length - endLen) : "*");
    return res;
  }

  // 保留两位小数 浮点数四舍五入 位数不够 不补0
  static formatFloat(num) {
    return Math.round(num * Math.pow(10, 2)) / Math.pow(10, 2);
  }

  // 保留两位小数 不四舍五入 ，向下取整
  static formatFloatFloor(num) {
    return Math.floor(num * 100) / 100;
  }
}
